package model.comunication;

import java.util.Calendar;
import java.util.List;

import model.Alumno;
import model.Clase;
import model.Cursada;
import model.Curso;
import model.Empresa;
import model.Estado_Cursada;
import model.Evaluacion;
import model.Horario;
import model.Instructor;
import model.Sala;
import model.dba.CursadaDAO;

public class ICursada {

	private static ICursada cusadaInterface;
	private CursadaDAO cursadaDAO;

	private ICursada() {
		this.cursadaDAO = CursadaDAO.getInstance();
	}

	public static ICursada getInstance() {
		if (cusadaInterface == null) {
			cusadaInterface = new ICursada();
		}
		return cusadaInterface;
	}

	/**
	 * 
	 * @param fechaInicioCursada
	 * @param fechaInicioInscripcion
	 * @param cantidadClases
	 * @param horasSemanales
	 * @param curso
	 * @return
	 */
	public Cursada getCursada(Calendar fechaInicioCursada, Calendar fechaInicioInscripcion, Integer cantidadClases, Integer horasSemanales, Curso curso) {
		return new Cursada(fechaInicioCursada, fechaInicioInscripcion, cantidadClases, horasSemanales, curso);
	}

	/**
	 * 
	 * @param id
	 * @param fechaInicioCursada
	 * @param fechaFinCursada
	 * @param fechaInicioInscripcion
	 * @param fechaFinInscripcion
	 * @param cantidadClases
	 * @param horasSemanales
	 * @param vacantes
	 * @param cupoMinimo
	 * @param instructor
	 * @param empresa
	 * @param horarios
	 * @param alumnos
	 * @param evaluaciones
	 * @param curso
	 * @param clases
	 * @param estado
	 * @param sala
	 * @return
	 */
	public Cursada getCursada(Integer id, Calendar fechaInicioCursada, Calendar fechaFinCursada, Calendar fechaInicioInscripcion, Calendar fechaFinInscripcion, Integer cantidadClases, Integer horasSemanales, Integer vacantes, Integer cupoMinimo, Instructor instructor, Empresa empresa, List<Horario> horarios, List<Alumno> alumnos, List<Evaluacion> evaluaciones, Curso curso, List<Clase> clases, Estado_Cursada estado, Sala sala) {
		return new Cursada(id, fechaInicioCursada, fechaFinCursada, fechaInicioInscripcion, fechaFinInscripcion, cantidadClases, horasSemanales, vacantes, cupoMinimo, instructor, empresa, horarios, alumnos, evaluaciones, curso, clases, estado, sala);
	}

	/**
	 * 
	 * @param fechaInicioCursada
	 * @param fechaFinCursada
	 * @param fechaInicioInscripcion
	 * @param fechaFinInscripcion
	 * @param cantidadClases
	 * @param horasSemanales
	 * @param vacantes
	 * @param cupoMinimo
	 * @param instructor
	 * @param empresa
	 * @param horarios
	 * @param alumnos
	 * @param evaluaciones
	 * @param curso
	 * @param clases
	 * @param estado
	 * @param sala
	 * @return
	 */
	public Cursada getCursada(Calendar fechaInicioCursada, Calendar fechaFinCursada, Calendar fechaInicioInscripcion, Calendar fechaFinInscripcion, Integer cantidadClases, Integer horasSemanales, Integer vacantes, Integer cupoMinimo, Instructor instructor, Empresa empresa, List<Horario> horarios, List<Alumno> alumnos, List<Evaluacion> evaluaciones, Curso curso, List<Clase> clases, Estado_Cursada estado, Sala sala) {
		return new Cursada(fechaInicioCursada, fechaFinCursada, fechaInicioInscripcion, fechaFinInscripcion, cantidadClases, horasSemanales, vacantes, cupoMinimo, instructor, empresa, horarios, alumnos, evaluaciones, curso, clases, estado, sala);
	}

	/**
	 * 
	 * @param id
	 * @return
	 */
	public Cursada getCursada(Integer id) {
		return cursadaDAO.getCursada(id);
	}

	/**
	 * 
	 * @return
	 */
	public List<Cursada> getAllCursadas() {
		return cursadaDAO.getAll();

	}

	/**
	 * 
	 * @param cursada
	 * @return
	 */
	public Integer add(Cursada cursada) {
		return cursadaDAO.add(cursada);
	}

	/**
	 * 
	 * @param cursada
	 * @return
	 */
	public boolean delete(Cursada cursada) {
		return cursadaDAO.delete(cursada);
	}

	/**
	 * 
	 * @param cursada
	 * @return
	 */
	public boolean update(Cursada cursada) {
		return cursadaDAO.update(cursada);
	}

	/**
	 * 
	 * @param cursada
	 * @return
	 */
	public boolean changeStado(Cursada cursada) {
		return cursadaDAO.changeEstado(cursada);
	}
}
